<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>钥匙和房间</title>
</head>
<body>
  <script>
    function fn(rooms) {
      // len为房间个数
      const len = rooms.length
      // 新建visited数组，visited[i]表示i号房间能否去到，值为true表示去得到，为false表示去不到
      const visited = new Array(len).fill(false)
      // 从0号房间开始，将visited[0]设为true
      visited[0] = true
      // 设置BFS的队列初始值为rooms[0]，是0号房间的持有的钥匙
      const queue = rooms[0]
      while (queue.length) {
        // 取出队列的第一个房间，为下一个打算去的房间
        let room = queue.shift()
        // 判断这个房间是否已经去过，如果去过的话直接跳过，没去过的话，将里面的钥匙添加到队列里
        if (!visited[room]) {
          visited[room] = true
          queue.push(...rooms[room])
        }
      }
      // 判断是不是所有房间都能进入
      return visited.every(v => v === true)
    }
    console.log(fn([[1],[2],[3],[]]))
  </script>
</body>
</html>